#pragma once

#include "List.h"

template < class Iterator , class Ptr , class Ref >
struct Revise_Iterator
{
	typedef Revise_Iterator < Iterator, Ptr, Ref > Self;

	Revise_Iterator(Iterator it)
		:_it(it)
	{
		;
	}

	bool operator == (const Self& rit)
	{
		return _it == rit._it;
	}

	bool operator != (const Self& rit)
	{
		return _it != rit._it;
	}

	Self& operator ++ ()
	{
		++_it;

		return *(this);
	}

	Self& operator -- ()
	{
		--_it;

		return *(this);
	}

	Self operator ++ ()
	{
		Self rit(_it);
		++_it;

		return rit;
	}

	Self& operator -- ()
	{
		Self rit(_it);
		--_it;

		return rit;
	}

	Iterator _it;
};